#include "sconfig.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>



SConfig::SConfig()
{

}

char *delspace(char *buf)//去掉一行字符串的前后空格
{
    int i;
    while((*buf)==' ')
    {
        strcpy(buf,buf+1);
    }
    for(i=strlen(buf)-1;(buf[i])==' ';i--)
    {
        buf[i]='\0';
    }
    return buf;
}

bool SConfig::ParseFile(const char *file)
{

    FILE *fp;
    char buf[1024];
    char *ch2;


    struct configitem item;

    fp=fopen(file,"r");
    if(fp < 0)
    {
        return false;
    }
    else
    {
        while(fgets(buf,sizeof(buf),fp)!=NULL)
        {

            delspace(buf);

            if(strlen(buf)==1||(strncmp(buf,"#",1)==0)||(strncmp(buf,";",1)==0))//判断读到的这一行是不是空行，是空行就读下一行
            {
                continue;
            }
            else
            {
                ch2=strchr(buf,'=');
                if(ch2==NULL)
                {
                    continue;
                }
                //cout<<buf<<endl;
                *ch2='\0';


                item.key=new char[strlen(buf)];
                item.value=new char[strlen((ch2)+1)+1];
                strcpy(item.key,buf);
                strcpy(item.value,(ch2)+1);
                //item[i].key=buf;
                //item[i].value=(ch2)+1;
                delspace(item.key);
                delspace(item.value);

                configs.push_back(item);
            }

        }



        fclose(fp);

        return true;
    }


}

bool SConfig::GetConfigInt(const char *key, int &val)

{

    vector<configitem>::iterator it;
    for(it=configs.begin();it!=configs.end();it++)
    {
        if(strcmp((*it).key,key)==0)
        {
            val= atoi((*it).value);
        }
    }



    return false;
}

bool SConfig::GetConfigFloat(const char *key, float &val)
{
    vector<configitem>::iterator it;
    for(it=configs.begin();it!=configs.end();it++)
    {
        if(strcmp((*it).key,key)==0)
        {
            val= atof((*it).value);
        }
    }
    return false;
}

bool SConfig::GetConfigString(const char *key, char *val)
{
    vector<configitem>::iterator it;
    for(it=configs.begin();it!=configs.end();it++)
    {
        if(strcmp((*it).key,key)==0)
        {
            strcpy(val,(*it).value);

        }
    }
    return false;
}



SConfig::~SConfig()
{
    vector<configitem>::iterator it;
    for(it=configs.begin();it!=configs.end();it++)
    {
        delete[](*it).key;
        delete[](*it).value;
    }
}
